package com.inno.life.domain.utils;

import com.github.houbb.sensitive.word.bs.SensitiveWordBs;
import com.inno.life.common.error.BusinessException;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @author sean
 */
@Component
public class SensitiveWordUtil {

    @Resource
    private SensitiveWordBs customSensitiveWordBs;

    /**
     * 判断是否包含敏感词
     * @param content 文本内容
     * @return true ： 包含敏感词  false ： 不包含
     */
    public boolean check(String content) {
        return customSensitiveWordBs.contains(content);
    }

    /**
     * 使用 * 替换敏感词
     * @return 替换后的文本
     */
    public String replace(String content) {
        return customSensitiveWordBs.replace(content);
    }

    /**
     * 返回字符串所有敏感词
     * @return 敏感词集合
     */
    public List<String> findAll(String content) {
        return customSensitiveWordBs.findAll(content);
    }

    /**
     * 返回字符串第一个敏感词
     * @return 敏感词
     */
    public String findFirst(String content) {
        return customSensitiveWordBs.findFirst(content);
    }

    /**
     * 查找所有敏感词格式化返回敏感词列表
     * @param content 文本内容
     * @return 格式化后的敏感词列表
     */
    public String formatFindAll(String content){
        return formatSensitiveWord(findAll(content));
    }

    /**
     * 检查字符串是否存在敏感词并抛出格式化后的异常信息
     * @param content 受检文本
     * @throws BusinessException 格式化后的异常信息
     */
    public void checkAndThrowFormatError(String content){
        boolean check = check(content);
        if (check){
            throw new BusinessException("发布内容包含敏感词汇,：" + formatFindAll(content) + ",请构建和谐社区环境！");
        }
    }

    /**
     * 返回格式化的敏感词列表
     */
    public String formatSensitiveWord(List<String> wordList) {
        return String.join(",", wordList.stream().map(word -> "【" + word + "】").toList());
    }
}
